<?xml version="1.0" encoding="UTF-8"?>

<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->

<!--
    Ignite Spring configuration file to startup grid cache.

    When starting a standalone Ignite node, you need to execute the following command:
    {IGNITE_HOME}/bin/ignite.{bat|sh} examples/config/spring-cache.xml

    When starting Ignite from Java IDE, pass path to this file into Ignition:
    Ignition.start("examples/config/spring-cache.xml");
-->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/util
        http://www.springframework.org/schema/util/spring-util.xsd">
    <!--
        Configuration below demonstrates how to setup caches within grid nodes.
    -->
    <bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
        <property name="deploymentMode" value="SHARED"/>

        <!--
            For better performance set this property to false in case
            peer deployment is not used.
            Default value is false.
        -->
        <property name="peerClassLoadingEnabled" value="true"/>

        <!--
            Configure binary marshaller.
        -->
        <property name="marshaller">
            <bean class="org.apache.ignite.internal.binary.BinaryMarshaller" />
        </property>

        <!-- Set to local host address just for examples. -->
        <property name="localHost" value="127.0.0.1"/>

        <!-- Configure REST TCP server address. -->
        <property name="connectorConfiguration">
            <bean class="org.apache.ignite.configuration.ConnectorConfiguration">
                <property name="host" value="127.0.0.1"/>
            </bean>
        </property>

        <!--
            Enable cache events.
        -->
        <property name="includeEventTypes">
            <util:constant static-field="org.apache.ignite.events.EventType.EVTS_CACHE"/>
        </property>

        <property name="cacheConfiguration">
            <!--
                Specify list of cache configurations here. Any property from
                CacheConfiguration interface can be configured here.
                Note that absolutely all configuration properties are optional.
            -->
            <list>
                <!--
                    Partitioned cache example configuration (Atomic mode).
                -->
                <bean class="org.apache.ignite.configuration.CacheConfiguration">
                    <property name="name" value="partitioned"/>

                    <property name="cacheMode" value="PARTITIONED"/>

                    <!-- Only atomic updates will be supported. -->
                    <property name="atomicityMode" value="ATOMIC"/>

                    <!-- Enable primary sync write mode. -->
                    <property name="writeSynchronizationMode" value="PRIMARY_SYNC"/>

                    <!--
                        This shows how to configure number of backups. The below configuration
                        sets the number of backups to 1 (which is default).
                    -->
                    <property name="backups" value="1"/>

                    <!-- Set synchronous rebalancing (default is asynchronous). -->
                    <property name="rebalanceMode" value="SYNC"/>
                </bean>

                <!--
                    Partitioned cache example configuration (Transactional mode).
                -->
                <bean class="org.apache.ignite.configuration.CacheConfiguration">
                    <property name="name" value="partitioned_tx"/>

                    <property name="cacheMode" value="PARTITIONED"/>

                    <!-- Transactional updates supported. -->
                    <property name="atomicityMode" value="TRANSACTIONAL"/>

                    <!-- Enable near cache to cache recently accessed data. -->
                    <property name="nearConfiguration">
                        <bean class="org.apache.ignite.configuration.NearCacheConfiguration"/>
                    </property>

                    <!--
                        Setting this value will cause local node to wait for remote commits.
                        However, it's important to set it this way in the examples as we assert on
                        conditions that usually assume full completion of transactions on all nodes.
                    -->
                    <property name="writeSynchronizationMode" value="FULL_SYNC"/>

                    <!--
                        This shows how to configure number of backups. The below configuration
                        sets the number of backups to 1 (which is default).
                    -->
                    <property name="backups" value="1"/>

                    <!-- Set synchronous rebalancing (default is asynchronous). -->
                    <property name="rebalanceMode" value="SYNC"/>
                </bean>

                <!--
                    Replicated cache example configuration.
                -->
                <bean class="org.apache.ignite.configuration.CacheConfiguration">
                    <property name="name" value="replicated"/>

                    <!--
                        Setting this value will cause local node to wait for remote commits.
                        However, it's important to set it this way in the examples as we assert on
                        conditions that usually assume full completion of transactions on all nodes.
                    -->
                    <property name="writeSynchronizationMode" value="FULL_SYNC"/>

                    <!-- REPLICATED cache mode. -->
                    <property name="cacheMode" value="REPLICATED"/>

                    <!-- Set synchronous rebalancing (default is asynchronous). -->
                    <property name="rebalanceMode" value="SYNC"/>
                </bean>
            </list>
        </property>

        <!--
            Uncomment this to provide TCP discovery SPI (Amazon EC2).
        -->
        <!--
        <property name="discoverySpi">
            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                <property name="ipFinder">
                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.s3.TcpDiscoveryS3IpFinder">
                        <property name="awsCredentials">
                            <bean class="com.amazonaws.auth.BasicAWSCredentials">
                                <constructor-arg value="YOUR_ACCESS_KEY_ID" />
                                <constructor-arg value="YOUR_SECRET_ACCESS_KEY" />
                            </bean>
                        </property>
                        <property name="bucketName" value="YOUR_BUCKET_NAME_IP_FINDER"/>
                    </bean>
                </property>
            </bean>
        </property>
        -->

        <!--
            Uncomment this to provide TCP discovery SPI (Local network).

            If path to shared file system is not explicitly provided,
            then only local nodes will be able to discover each other.
        -->
        <!--
        <property name="discoverySpi">
            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                <property name="ipFinder">
                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.sharedfs.TcpDiscoverySharedFsIpFinder">
                        <property name="path" value="work/disco/tcp"/>
                    </bean>
                </property>
            </bean>
        </property>
        -->

        <!--
            TCP discovery SPI configuration with predefined addresses.
            Use the addresses list to provide IP addresses of initial nodes in the grid
            (at least one address must be provided).

            Note:
            =====
            If running in distributed environment, you should change IP addresses to the actual IP addresses
            of the servers on your network. Not all addresses need to be specified, only the addresses
            of one or more servers which will always be started first.
        -->
        <property name="discoverySpi">
            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                <property name="ipFinder">
                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
                        <property name="addresses">
                            <list>
                                <!--
                                    List all IP/port configurations that potentially
                                    can be started first in examples. We are assuming
                                    grid of size 10 or less.
                                -->
                                <value>127.0.0.1:47500</value>
                                <value>127.0.0.1:47501</value>
                                <value>127.0.0.1:47502</value>
                                <value>127.0.0.1:47503</value>
                                <value>127.0.0.1:47504</value>
                                <value>127.0.0.1:47505</value>
                                <value>127.0.0.1:47506</value>
                                <value>127.0.0.1:47507</value>
                                <value>127.0.0.1:47508</value>
                                <value>127.0.0.1:47509</value>
                            </list>
                        </property>
                    </bean>
                    <!--
                    Uncomment this to provide IP finder using multicast for nodes discovery.
                    In addition to addresses received via multicast this finder can work with pre-configured
                    list of addresses.
                    -->
                    <!--
                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder">
                        <property name="addresses">
                            <list>
                                <value>host1:port1</value>
                                <value>host2:port2</value>
                            </list>
                        </property>
                    </bean>
                    -->
                </property>
            </bean>
        </property>
    </bean>
</beans>
